package com.zhike.util;
import java.security.MessageDigest;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class BasicsUtil {
	
	private static double EARTH_RADIUS = 6378.137;// 单位千米
	/**
	 * md5加密
	 * @param str
	 * @return
	 */
	public final static String getMD5(String pwd) {  
        //用于加密的字符  
        char md5String[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',  
                'A', 'B', 'C', 'D', 'E', 'F' };  
        try {  
            //使用平台的默认字符集将此 String 编码为 byte序列，并将结果存储到一个新的 byte数组中  
            byte[] btInput = pwd.getBytes();  
               
            //信息摘要是安全的单向哈希函数，它接收任意大小的数据，并输出固定长度的哈希值。  
            MessageDigest mdInst = MessageDigest.getInstance("MD5");  
               
            //MessageDigest对象通过使用 update方法处理数据， 使用指定的byte数组更新摘要  
            mdInst.update(btInput);  
               
            // 摘要更新之后，通过调用digest（）执行哈希计算，获得密文  
            byte[] md = mdInst.digest();  
               
            // 把密文转换成十六进制的字符串形式  
            int j = md.length;  
            char str[] = new char[j * 2];  
            int k = 0;  
            for (int i = 0; i < j; i++) {   //  i = 0  
                byte byte0 = md[i];  //95  
                str[k++] = md5String[byte0 >>> 4 & 0xf];    //    5   
                str[k++] = md5String[byte0 & 0xf];   //   F  
            }  
               
            //返回经过加密后的字符串  
            return new String(str);  
               
        } catch (Exception e) {  
            return null;  
        }  
    }  
	
	/**
	 * 自动补4个o
	 * @param i
	 * @return
	 */
	public static String projectNumberUtil(Integer i) {
		String format = String.format("%04d", i+1);
		return  format;
	}
	
	/**
	 * 自动补2个o
	 * @param i
	 * @return
	 */
	public static String stringFormatUtil(Integer i) {
		String format = String.format("%02d", i);
		return  format;
	}
	
	/**
	 * 角度弧度计算公式 rad:(). <br/>
	 * 
	 * 360度=2π π=Math.PI
	 * 
	 * x度 = x*π/360 弧度
	 * 
	 * @author chiwei
	 * @param d
	 * @return
	 * @since JDK 1.6
	 */
	private static double getRadian(double degree) {
		return degree * Math.PI / 180.0;
	}
	/**
	 * 依据经纬度计算两点之间的距离 GetDistance:(). <br/>
	 * 
	 * 
	 * @author chiwei
	 * @param lat1
	 *            1点的纬度
	 * @param lng1
	 *            1点的经度
	 * @param lat2
	 *            2点的纬度
	 * @param lng2
	 *            2点的经度
	 * @return 距离 单位 米
	 */
	public static double getDistance(double lat1, double lng1, double lat2, double lng2) {
		double radLat1 = getRadian(lat1);
		double radLat2 = getRadian(lat2);
		double a = radLat1 - radLat2;// 两点纬度差
		double b = getRadian(lng1) - getRadian(lng2);// 两点的经度差
		double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1)
				* Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
		s = s * EARTH_RADIUS;
		return s * 1000;
	}
	
	/**
	 * string经纬度的加减小于100m
	 */
	public static boolean distance100M(String latitude1,String longitude1,String latitude2,String longitude2) {
		//系统规定的纬度
		double lat1 = Double.parseDouble(latitude1);
		//系统规定的经度
		double lng1 = Double.parseDouble(longitude1);
		//页面上传递过来的纬度
		double lat2 = Double.parseDouble(latitude2);
		//页面上传递过来的经度
		double lng2 = Double.parseDouble(longitude2);
		double distance = getDistance(lat1, lng1, lat2, lng2);
		if (distance<200) {
			return true;
		}		
		else {
			return false;
		}
	}
	
	public static String JXJSONBM(String json) {
		JsonObject jsonObject = (JsonObject) new JsonParser().parse(json);
		JsonArray asJsonArray = jsonObject.get("databases").getAsJsonArray();
		JsonElement jsonElement = asJsonArray.get(0);
		JsonObject asJsonObject = jsonElement.getAsJsonObject();
		String string = asJsonObject.get("table").toString();
		String replace = string.replace("\"", "");
		return replace;
		
	}
	
	/**
	 * 领取编号的规则
	 * @param rules
	 * @return
	 */
	public static String numberRules(String rules) {
		String string="{S:ZKZY}{D:yy}{S:-}{S:MQ-}{A:4,0,1}";
		String[] split = string.split("}");
		System.out.println(1);
		String number="";
		for (int i = 0; i < split.length; i++) {
			System.out.println("分割的字符串为"+split[i]);
			if (split[i].contains("S")) {
				number+=split[i].substring(3);
			}
			if (split[i].contains("D")) {
			String substring = split[i].substring(3);
			if (substring.equals("yyyy")) {
				String currentYear = DateUtil.getCurrentYear();
				number+=currentYear;
			}
			if (substring.equals("yy")) {
				String currentYear = DateUtil.getCurrentYear();
				currentYear.substring(2, 4);
				number+=currentYear;
			}
			
			}
			if (split[i].contains("A")) {
				double a=0;
				double random = Math.random();
				a=random*1000;
				String string3 = String.valueOf(a).substring(0, 5).replace(".", "");
				number+=string3;
			}
	}
		return number;
	}

	
	
}
